/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import conexao.Comunicacao;
import controllerPesquisa.PesquisaFuncionarioServicoController;
import java.util.Iterator;
import java.util.List;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import modelo.Funcionario;
import modelo.FuncionarioServico;
import modelo.Pessoa;
import modelo.Servico;
import tabelas.DataTable;
import utilMensagem.msgMensagem;
import viewCadastros.CadFuncionario;

/**
 *
 * @author fumio
 */
public class FuncionarioController {

    private CadFuncionario cadFuncionario;
    private msgMensagem msg;
    private static Funcionario funcionario;
    private static FuncionarioServico funcionarioServico;
    private static Comunicacao com;
    private static Pessoa pessoa;
    private PesquisaFuncionarioServicoController pesquisaFuncionarioServicoController;
    private static Servico servico;
    private static DataTable table;

    public FuncionarioController(CadFuncionario cadFuncionario) {
        this.cadFuncionario = null;
        this.cadFuncionario = cadFuncionario;
    }

    public void registrar() {
        msg = new msgMensagem(null, true);
        if (salvar()) {
            msg.emiteMensagem("Funcionário registrado com sucesso!", 100, 300);
        } else {
            msg.emiteMensagem("Não foi possível registrar o funcionário!", 100, 300);
        }
    }

    private boolean salvar() {
        boolean salvar;
        try {
            if (funcionario == null) {
                funcionario = new Funcionario();
            }

            funcionario.setPessoa(selecionaPessoa());
            funcionario.setLogin(cadFuncionario.edtLogin.getText());
            funcionario.setSenha(cadFuncionario.edtSenha.getText());
            System.out.println(servico.getServico());
            com = new Comunicacao();
            salvar = com.Persiste(funcionario);
        } catch (Exception e) {
            System.out.println("here" + e.getMessage());
            salvar = false;
        }
        return salvar;
    }

    private boolean salvarFuncionarioServico() {
        try {
            if (funcionarioServico == null) {
                funcionarioServico = new FuncionarioServico();
            }
            funcionarioServico.setIdFuncionario(funcionario);
            funcionarioServico.setIdServico(servico);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    private Pessoa selecionaPessoa() {
        com = new Comunicacao();
        List<Pessoa> listaAux;
        listaAux = com.executeSql("select p from Pessoa p where p.idPessoa = " + cadFuncionario.edtCodPessoa.getText());
        pessoa = (Pessoa) listaAux;
        return pessoa;
    }

    public void chamaPesquisa() {
        pesquisaFuncionarioServicoController = new PesquisaFuncionarioServicoController();
        servico = pesquisaFuncionarioServicoController.selecionaServico();
        cadFuncionario.edtCodServico.setText(servico.getIdServico().toString());
        cadFuncionario.edtServico.setText(servico.getServico());
    }

    public void adicionarServico() {
        salvarFuncionarioServico();
        atualizarTabelaServico();
    }

        private void atualizarTabelaServico() {

        if (table == null) {
            table = new DataTable(cadFuncionario.tableServico);

            table.adicionarColuna("Código", 15);
            table.adicionarColuna("Serviço", 40);
            table.adicionarColuna("Valor", 45);
            cadFuncionario.tableServico.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    if (e.getValueIsAdjusting()) {
                        
                    }
                    ;
                }

            });

        }

        table.removerTodos();

        String select = "select s from Servico s";
        com = new Comunicacao();
        List dados = com.executeSql(select);
        for (Iterator it = dados.iterator(); it.hasNext();) {
            Object dado = it.next();
            servico = (Servico) dado;
            Object[] linha = {servico.getIdServico(), servico.getServico(), servico.getValorUnitario()};
            table.adicionarLinha(linha);
        }
        table.setDados(dados);
    }
    
}
